package br.com.mkmts.model.vendas;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import br.com.mkmts.model.ClienteEntity;
import br.com.mkmts.view.constants.FormaDePagamentoEnum;

@Entity
@Table(name="tVendas")
public class VendaEntity implements Serializable{

	private static final long serialVersionUID = 8829568145770105114L;

	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="IDVenda")
	private Integer codVenda;
	
	@ManyToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name="tVendas_join_tHistProdsVendidos", 
    	joinColumns={@JoinColumn(name="IDVenda")}, 
    		inverseJoinColumns={@JoinColumn(name="IDProduto")})
	private List<ProdutoVendidoHistoricoEntity>listaDeProdutos;
	
	@ManyToOne
	@JoinColumn(name = "IDCliente", nullable = false)
	private ClienteEntity cliente;
	
	@Column(name="dtVenda", nullable = false)
	private Date dataVenda;
	
	@Column(name="vlrTotalVenda" , nullable = false)
	private BigDecimal valorVenda;

	@Column(name="qtdeTotalPontosVendidos" , nullable = false)
	private Integer qtdeTotalPontosVendidos;

	@Enumerated(EnumType.ORDINAL)
	@Column(name= "FormaPagamento")
	private FormaDePagamentoEnum formaDePagamento;
	
	@Column(name = "PossuiParcelas")
	private boolean possuiParcelas;

	@Column(name = "NumeroParcelas")
	private Integer numeroParcelas;

	@Column(name = "ValorParcelas")
	private BigDecimal valorParcelas;
	
	public VendaEntity() {
		// TODO Auto-generated constructor stub
	}
	
	public VendaEntity(Integer codVenda, List<ProdutoVendidoHistoricoEntity> listaDeProdutos,
			ClienteEntity cliente, Date dataVenda, BigDecimal valorVenda,
			FormaDePagamentoEnum formaDePagamento, boolean possuiParcelas,
			Integer numeroParcelas, BigDecimal valorParcelas) {
		super();
		this.codVenda = codVenda;
		this.listaDeProdutos = listaDeProdutos;
		this.cliente = cliente;
		this.dataVenda = dataVenda;
		this.valorVenda = valorVenda;
		this.formaDePagamento = formaDePagamento;
		this.possuiParcelas = possuiParcelas;
		this.numeroParcelas = numeroParcelas;
		this.valorParcelas = valorParcelas;
	}

	public Integer getCodVenda() {
		return codVenda;
	}

	public void setCodVenda(Integer codVenda) {
		this.codVenda = codVenda;
	}

	public List<ProdutoVendidoHistoricoEntity> getListaDeProdutos() {
		return listaDeProdutos;
	}

	public void setListaDeProdutos(List<ProdutoVendidoHistoricoEntity> listaDeProdutos) {
		this.listaDeProdutos = listaDeProdutos;
	}

	public ClienteEntity getCliente() {
		return cliente;
	}

	public void setCliente(ClienteEntity cliente) {
		this.cliente = cliente;
	}

	public Date getDataVenda() {
		return dataVenda;
	}

	public void setDataVenda(Date dataVenda) {
		this.dataVenda = dataVenda;
	}

	public BigDecimal getValorVenda() {
		return valorVenda;
	}

	public void setValorVenda(BigDecimal valorVenda) {
		this.valorVenda = valorVenda;
	}

	public FormaDePagamentoEnum getFormaDePagamento() {
		return formaDePagamento;
	}

	public void setFormaDePagamento(FormaDePagamentoEnum formaDePagamento) {
		this.formaDePagamento = formaDePagamento;
	}

	public boolean isPossuiParcelas() {
		return possuiParcelas;
	}

	public void setPossuiParcelas(boolean possuiParcelas) {
		this.possuiParcelas = possuiParcelas;
	}

	public Integer getNumeroParcelas() {
		return numeroParcelas;
	}

	public void setNumeroParcelas(Integer numeroParcelas) {
		this.numeroParcelas = numeroParcelas;
	}

	public BigDecimal getValorParcelas() {
		return valorParcelas;
	}

	public void setValorParcelas(BigDecimal valorParcelas) {
		this.valorParcelas = valorParcelas;
	}

	public Integer getQtdeTotalPontosVendidos() {
		return qtdeTotalPontosVendidos;
	}

	public void setQtdeTotalPontosVendidos(Integer qtdeTotalPontosVendidos) {
		this.qtdeTotalPontosVendidos = qtdeTotalPontosVendidos;
	}
	
}
